package tp1;

public class Equipo {
	private int numero;
	private Programa[] programasPosibles;
	private Programa programaActual;
	private Desperfecto desperfecto;
	private Pedido pedidoActual;
	private short costoBaja;
	private short costoAlta;
	private int horaFinalizacion;
	private int tiempoUso;
	
	public Equipo(short costoB, short costoA, Programa[] programas, int num)
	{
		numero=num;
		costoBaja = costoB;
		costoAlta = costoA;
		programasPosibles = new Programa[programas.length];
		System.arraycopy(programas, 0, programasPosibles, 0, programas.length);
	}
	
	public void alertarDesperfecto(Tarea tareaActual)
	{
		System.out.println("Desperfecto en el equipo "+this.numero+" , ejecutando la tarea"+tareaActual.getNombre() +". Reinicia en la tarea T-k");
	}
	
	public void alertarEstado()
	{
		System.out.println("");
	}
	
	public void generarDesperfecto()
	{
		desperfecto = new Desperfecto();
		this.alertarDesperfecto(getProgramaActual().obtenerTareaActual(getPedidoActual().getHoraComienzoEjecucion()));
		getProgramaActual().gestionarDesperfecto(getPedidoActual());
		System.out.println(getPedidoActual().getHoraComienzoEjecucion());
	}
	
	public boolean estoyDisponible()
	{
		if(pedidoActual==null/*Simulador.contador>this.horaFinalizacion*/)
			return true;
		return false;
			
	}
	
	public boolean puedoHacer(Pedido pedido)
	{
		int i=0;
		while(i<programasPosibles.length)
		{
			if((pedido.getPrograma()).getNombre() == programasPosibles[i].getNombre())
				return true;
		i++;
		}
		return false;
	}
	
	public int tiempoLibre()
	{
		if(Simulador.contador - this.getHoraFinalizacion() > 0)
			return Simulador.contador - this.getHoraFinalizacion();
		if(this.getHoraFinalizacion() == 0)
			return 999;
		return -1;
			
	}
	
	public void procesarPedido(Pedido pedido)
	{
		setPedidoActual(pedido);
		setProgramaActual(pedido.getPrograma());
		setHoraFinalizacion(999);//programaActual.procesarTareas() + Simulador.contador;
		getPedidoActual().setHoraFinalizacion(getHoraFinalizacion());
		getPedidoActual().setHoraComienzoEjecucion(Simulador.contador);
	}
	
	public void alertarComienzoPrimerTarea()
	{
		getProgramaActual().obtenerPrimerTarea().alertarComienzo(getProgramaActual(),this.numero);
	}
	
	public void calcularCostoTotal()
	{
	}
	public void verificarEvento(){
		if(getPedidoActual()!= null)
			getProgramaActual().verificarEvento(getPedidoActual().getHoraComienzoEjecucion(),this.numero);
		/*if(pedidoActual==nullprogramaActual.isFinish(pedidoActual.getHoraComienzoEjecucion()))
			this.setHoraFinalizacion(Simulador.contador);
		else
			if(programaActual.isFinish(pedidoActual.getHoraComienzoEjecucion()))
				this.setHoraFinalizacion(Simulador.contador);*/
	}

	public void setPedidoActual(Object object) {
		// TODO Auto-generated method stub
		pedidoActual = (Pedido) object;
	}

	public void setHoraFinalizacion(int horaFinalizacion) {
		this.horaFinalizacion = horaFinalizacion;
	}

	public int getHoraFinalizacion() {
		return horaFinalizacion;
	}

	public void setProgramaActual(Programa programaActual) {
		this.programaActual = programaActual;
	}

	public Programa getProgramaActual() {
		return programaActual;
	}

	public void setPedidoActual(Pedido pedidoActual) {
		this.pedidoActual = pedidoActual;
	}

	public Pedido getPedidoActual() {
		return pedidoActual;
	}
}
